// 导入模块
import { useUserStore } from "@/stores/user"
import type { UserType } from "@/type/user"
import Request from "luch-request"
const store = useUserStore()


// 实例化网络请求
const request = new Request({
  // 接口基地址
  baseURL: "https://consult-api.itheima.net",
})

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // console.log("我一把抓住了请求，顷刻炼化")
    // 请求加载动画

    // 判断token 配置token（）注意持票者的的具体操作
    if(store.user.token &&config.header ) {
      config.header.Authorization = `Bearer ${store.user.token}`
    }

    uni.showLoading({
      title: "加载中... ...",
      mask: true,
    })

    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  (res) => {
    // console.log("请求完成，但是业务不一定成功")
    // 请求返回则立刻关闭加载框 - 成功
    uni.hideLoading()

    // 统一错误处理
    if (res.data.code !== 10000) {
      // 全端提示
      uni.showToast({
        title: res.data.message,
        icon: "none",
      })
      // Promise失败，跳转到catch去
      return Promise.reject(res.data)
    }
    // 简化数据返回 剥离数据
    return res.data?.data
  },
  (error) => {
    // 返回结果立刻关闭加载框 - 失败
    uni.hideLoading()

    if (error.data.code === 401) {
      // 401 token问题 => 自己再重新登陆 获取一个新token

      // uni.switchTab
      // uni.navigateTo  跳转页面 保留记录
      // uni.redirectTo  跳转页面 覆盖记录
      // 1. 跳转登录
      uni.redirectTo({
        url: '/pages/login/index',
      })
      // 2. 提示
      uni.showToast({
        title: '您的登录过期了,请重新登录',
        icon: 'none',
      })
      // 3. 清除仓库内的无效数据
      const store = useUserStore()
      store.setUser({} as UserType)
    }
    return Promise.reject(error)
  }
)

// 导出配置好的模网络模块
export { request }
